function [q,r]=desigpoly(b,a)
% q= desigpoly(b,a)
% [q,r]= desigpoly(b,a)
%
% This is a modification of MATLAB's DECONV function to behave as
% a typical seismic designature algorithm. 'b' contains a seismic
% trace while 'a' contains a signature to be removed from 'b' 
% using MATLAB's DECONV algorithm. The length of the resultant, 'q',
% is equal to the length of 'b'.
% 
%DECONV  Deconvolution.
%	[Q,R] = DECONV(B,A) deconvolves vector A out of vector B.  The result
%	is returned in vector Q and the remainder in vector R such that
%	B = conv(Q,A) + R.   See also CONV.
%
%	If A and B are vectors of polynomial coefficients, deconvolution
%	is equivalent to polynomial division.  The result of dividing B by
%	A is quotient Q and remainder R.
%
%	J.N. Little 2-6-86
%	Copyright (c) 1985, 1986 by the MathWorks, Inc.
%
% modified to DESIG by G.F. Margrave, May 1991
% NOTE: This SOFTWARE may be used by any individual or corporation for any purpose
% with the exception of re-selling or re-distributing the SOFTWARE.
% By using this software, you are agreeing to the terms detailed in this software's
% Matlab source file.

% BEGIN TERMS OF USE LICENSE
%
% This SOFTWARE is maintained by the CREWES Project at the Department
% of Geology and Geophysics of the University of Calgary, Calgary,
% Alberta, Canada.  The copyright and ownership is jointly held by
% its 'AUTHOR' (identified above) and the CREWES Project.  The CREWES
% project may be contacted via email at:  crewesinfo@crewes.org
%
% The term 'SOFTWARE' refers to the Matlab source code, translations to
% any other computer language, or object code
%
% Terms of use of this SOFTWARE
%
% 1) This SOFTWARE may be used by any individual or corporation for any purpose
%    with the exception of re-selling or re-distributing the SOFTWARE.
%
% 2) The AUTHOR and CREWES must be acknowledged in any resulting publications or
%    presentations
%
% 3) This SOFTWARE is provided "as is" with no warranty of any kind
%    either expressed or implied. CREWES makes no warranties or representation
%    as to its accuracy, completeness, or fitness for any purpose. CREWES
%    is under no obligation to provide support of any kind for this SOFTWARE.
%
% 4) CREWES periodically adds, changes, improves or updates this SOFTWARE without
%    notice. New versions will be made available at www.crewes.org .
%
% 5) Use this SOFTWARE at your own risk.
%
% END TERMS OF USE LICENSE
[mb,nb] = size(b);
nb = max(mb,nb);
na = length(a);
q = 0;
if na > nb
	q = 0;
	r = b;
	return
end
if a(1)==0
	error('First coefficient of A must be non-zero.')
end
% Deconvolution and polynomial division are the same operations
% as a digital filter's impulse response B(z)/A(z):
%keyboard
q = filter(b, a, [1 zeros(1,nb-1)]);
%keyboard
if mb ~= 1
	q = q(:);
end
r = b - convm(q,a);